package com.itheima.factory;

import java.lang.reflect.Constructor;
import java.util.Properties;
import java.util.ResourceBundle;

/**
 * 定义工厂类，专门用于创建对象
 */
public class BeanFactory {

    // 通过静态代码块加载配置文件，类第一次加载时候执行
    private static ResourceBundle resourceBundle;
    static {
        resourceBundle = ResourceBundle.getBundle("bean");
    }

    /**
     * 需求：创建dao实例
     * 配置：
     *      userDao =com.itheima.dao.impl.UserOracleDaoImpl
     * 返回：
     *      具体的实例， 如 new UserOracleDaoImpl();
     */
    public static <T> T getBean(String key,Class<T> tClass){
        try {
            // 通过反射，创建对象，方式1：
            //String className = resourceBundle.getString(key);
            //return (T) Class.forName(className).newInstance();

            // 通过反射，创建对象，方式2：
            String className = resourceBundle.getString(key);
            Class<?> aClass = Class.forName(className);
            Constructor<?> constructor = aClass.getConstructor();
            Object obj =constructor.newInstance();
            return (T) obj;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}
